package joindemo.common.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.time.Duration;

/**
 * Redis 缓存配置枚举
 * 统一管理 CacheName、KeyPrefix 和 TTL，消除魔法值和双重维护
 * @author pym
 */
@Getter
@AllArgsConstructor
public enum RedisCacheEnum {
    /**
     * 文章详情缓存
     * Key: article:detail:{id}
     * TTL: 2小时
     */
    ARTICLE(CacheNames.ARTICLE, KeyPrefixes.ARTICLE, Duration.ofHours(2), "文章详情缓存"),
    /**
     * 文章草稿缓存
     * Key: article:draft:{userId}:{draftId}
     * TTL: 24小时
     */
    ARTICLE_DRAFT(CacheNames.ARTICLE_DRAFT, KeyPrefixes.ARTICLE_DRAFT, Duration.ofHours(24), "文章草稿缓存");
    /**
     * 缓存名称（对应 @Cacheable 的 value）
     */
    private final String cacheName;

    /**
     * Key 前缀（用于 RedisTemplate 手动拼接 key）
     */
    private final String keyPrefix;

    /**
     * 过期时间
     */
    private final Duration ttl;

    /**
     * 描述
     */
    private final String desc;

    /**
     * 【内部静态常量类】CacheName
     */
    public static class CacheNames {
        public static final String ARTICLE = "article";
        public static final String ARTICLE_DRAFT = "article_draft";
    }

    /**
     * 【内部静态常量类】KeyPrefix
     * 作用：供 RedisKeyUtil 或 RedisTemplate 手动拼接 Key 使用
     */
    public static class KeyPrefixes {
        // === 文章相关 ===
        public static final String ARTICLE = "article:detail:";
        public static final String ARTICLE_DRAFT = "article:draft:";
    }
}